package com.ball.dev.service.impl;

import com.ball.common.dtos.ResponseResult;
import com.ball.dev.entity.po.Personal;
import com.ball.dev.entity.po.PostComment;
import com.ball.dev.mapper.PostCommentMapper;
import com.ball.dev.service.IPersonalService;
import com.ball.dev.service.IPostCommentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author lou
 * @since 2024-04-10
 */
@Service
@RequiredArgsConstructor
public class PostCommentServiceImpl extends ServiceImpl<PostCommentMapper, PostComment> implements IPostCommentService {

    private final IPersonalService personalService;

    /**
     * 添加评论
     *
     * @param dto 评论信息对象，包括评论内容等信息
     * @return 返回评论操作的结果，成功则返回成功状态和消息，失败则返回错误状态和消息
     */
    @Override
    public ResponseResult addComment(PostComment dto) {
        // 检查传入的评论信息对象是否为null，若为null则返回参数错误的响应结果
        if (dto == null){
            return ResponseResult.errorResult(400,"参数错误");
        }

        Personal personal = personalService.lambdaQuery().eq(Personal::getUserId, dto.getUserId())
                .one();
        if (personal!=null){
            dto.setUserUsername(personal.getUserName());
            dto.setUserPhoto(personal.getPhoto());
        }


        // 设置评论的状态为0（代表正常状态），并设置创建时间和更新时间为当前时间
        dto.setStatus(0);
        dto.setCreateTime(LocalDateTime.now());
        dto.setUpdateTime(LocalDateTime.now());
        // 保存评论信息，根据保存结果返回相应的响应结果
        return save(dto) ? ResponseResult.okResult(200,"评论成功") : ResponseResult.errorResult(400,"评论失败");
    }

    /**
     * 获取指定文章的评论列表。
     *
     * @param postId 文章ID，不能为空。
     * @return 返回评论列表的响应结果。如果文章ID为空，返回错误结果，否则返回包含评论列表的成功结果。
     */
    @Override
    public ResponseResult getPostComments(String postId) {
        // 检查文章ID是否为空，如果为空则返回参数错误的响应结果
        if (postId == null)
            return ResponseResult.errorResult(400,"参数错误");

        // 查询状态为0（表示未删除）的，且属于指定文章ID的评论列表，按创建时间降序排序
        List<PostComment> list = lambdaQuery().eq(PostComment::getPostId, postId).eq(PostComment::getStatus, 0)
                .orderByDesc(PostComment::getCreateTime).list();

        // 返回查询到的评论列表的响应结果
        return ResponseResult.okResult(list);
    }


}
